package com.evoplory.statistics;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;

public class SystemTool {
    //空参构造
    public SystemTool() {
    }


    //展示URL方法
    public static void url(ArrayList<Web> url) {
        //输出所有预设URL
        System.out.println("以下是系统预设的所有URL");
        for(int i = 0; i<url.size(); i++){
            System.out.println(url.get(i).getUrl());
        }
        System.out.println();
    }


    //访问页面方法
    public static void match(ArrayList<Web> list, ArrayList<Date> dateList, String s) {
        //定义判断变量
        int k = -1;

        //遍历所有URL信息
        for (int i = 0; i < list.size(); i++) {
            //获取对象
            Web web = list.get(i);
            Date date = dateList.get(i);

            //判断URL是否与预设相等
            if (web.getUrl().equals(s)) {
                //该URL访问次数+1
                web.setCount(web.getCount() + 1);

                //获取当前系统时间
                LocalDateTime dateTime = LocalDateTime.now();

                //转换获取到的时间格式为“年-月-日-时-分-秒”
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

                //保存转换好的时间
                String time = dateTime.format(formatter);

                //记录时间
                date.setDate(time);

                //输出访问成功信息及访问情况
                System.out.println("您已成功访问" + s + "！");
                System.out.println("当前访问时间: " + date.getDate());
                System.out.println();

                //结束本次访问
                k = 0;
                break;

            }
        }

        //用户输入的URL不存在，自动添加
        if (k == -1) {
            //输出提示信息
            System.out.println("您输入的URL不存在，系统已自动保存您添加的页面信息！");

            //创建新Web对象并赋予用户输入的信息
            Web addWeb = new Web();
            addWeb.setUrl(s);
            addWeb.setCount(1);

            //创建新Date对象并预设信息
            Date addDate = new Date();
            //获取当前系统时间
            LocalDateTime dateTime = LocalDateTime.now();
            //转换获取到的时间格式为“年-月-日-时-分-秒”
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            //保存转换好的时间
            String time = dateTime.format(formatter);
            //记录时间
            addDate.setDate(time);

            //将新的Web对象及Date对象添加到集合
            list.add(addWeb);
            dateList.add(addDate);

        }
    }


    //总访问量方法
    public static void display(ArrayList<Web> list, ArrayList<Date> dateList) {
        //输出提示信息
        System.out.println("以下是所有页面的访问情况");

        //遍历所有URL信息
        for(int i = 0; i < list.size(); i++) {
            //获取当前对象
            Web web = list.get(i);
            Date date = dateList.get(i);

            //输出URL及对应的访问次数和访问时间
            System.out.println();
            System.out.println("URL: "+web.getUrl());
            System.out.println("访问次数: "+web.getCount());
            System.out.println("最后访问时间: "+date.getDate());
            System.out.println();
        }
    }


    //平均访问量方法
    public static void average(ArrayList<Web> list) {
        //定义求和变量
        int sum = 0;

        //遍历所有URL信息
        for(int i = 0; i < list.size(); i++) {
            //获取当前对象
            Web web = list.get(i);
            //计算所有页面的总访问量
            sum += web.getCount();
        }

        //计算并输出平均访问量
        double average = (double) sum / list.size();
        System.out.printf("所有页面的平均访问量为 %4.2f\n",average);
    }


    //清空所有统计信息方法
    public static void delete(ArrayList<Web> list, ArrayList<Date> dateList) {
        for(int i = list.size()-1; i>=0 ; i--) {
            //删除集合中的统计信息
            list.remove(i);
            dateList.remove(i);
        }

        //输出删除成功提示
        System.out.println("已删除所有访问统计信息！");
    }


    //访问量排行榜方法
    public static void rank(ArrayList<Web> list, ArrayList<Date> dateList) {
        //按访问量降序排序
        Collections.sort(list);

        //输出排序后结果
        for(int i = 0; i < list.size(); i++) {
            //获取对象
            Web web = list.get(i);
            Date date = dateList.get(i);

            //输出访问量统计信息
            System.out.println();
            System.out.println("URL: "+web.getUrl());
            System.out.println("访问次数: "+web.getCount());
            System.out.println("最后访问时间: "+date.getDate());
            System.out.println();

        }

    }


}
